package 力扣.数组.哈希法;


import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

public class 数组的度697 {
    public static void main(String[] args) {
//        int[] ints = {1, 2, 2, 3, 1};
//        int[] ints = {1, 2, 2, 3, 1,4,2};
//        int[] ints = {1,1};
        int[] ints = {2,1,1,2,1,3,3,3,1,3,1,3,2};
        int shortestSubArray = findShortestSubArray(ints);
        System.out.println(shortestSubArray);
    }

    public static int findShortestSubArray(int[] nums) {
            //1、使用HashMap记录每一个元素出现的次数、首位置、尾位置（这里的value为一个数组）
            Map<Integer, int[]> map = new HashMap<Integer, int[]>();
            int n = nums.length;
            for (int i = 0; i < n; i++) {
                if (map.containsKey(nums[i])) {
                    map.get(nums[i])[0]++;
                    map.get(nums[i])[2] = i;
                } else {
                    map.put(nums[i], new int[]{1, i, i});//三个元素分别代表: 这个数出现的次数、这个数在原数组中第一次出现的位置、这个数在原数组中最后一次出现的位置
                }
            }
            //2、遍历Hashmap寻找出现次数最多的那一个元素，若不止一个最大元素，则比较它们首位位置的长度
            int maxNum = 0, minLen = 0;
            for (Map.Entry<Integer, int[]> entry : map.entrySet()) {//遍历hashmap
                int[] arr = entry.getValue();
                if (maxNum < arr[0]) {
                    maxNum = arr[0];
                    minLen = arr[2] - arr[1] + 1;
                } else if (maxNum == arr[0]) {
                    if (minLen > arr[2] - arr[1] + 1) {
                        minLen = arr[2] - arr[1] + 1;
                    }
                }
            }
            return minLen;
        }

}
